
// Spinner ----------------------

@spinner-duration: 1.2s;

.loading-spinner(@size) {
  position: relative;
  display: block;
  width: 1em;
  height: 1em;
  font-size: @size;
  background: radial-gradient(@accent-color .1em, transparent .11em);

  &::before,
  &::after {
    content: "";
    position: absolute;
    z-index: 10; // prevent sibling elements from getting their own layers
    top: 0;
    left: 0;
    border-radius: 1em;
    width: inherit;
    height: inherit;
    border-radius: 1em;
    border: 2px solid;
    -webkit-animation: spinner-animation @spinner-duration infinite;
    -webkit-animation-fill-mode: backwards;
  }
  &::before {
    border-color: @accent-color transparent transparent transparent;
  }
  &::after {
    border-color: transparent lighten(@accent-color, 15%) transparent transparent;
    -webkit-animation-delay: (@spinner-duration/2);
  }

  &.inline-block {
    display: inline-block;
  }
}

@-webkit-keyframes spinner-animation {
    0% { transform: rotateZ(  0deg); -webkit-animation-timing-function: cubic-bezier(0, 0, .8, .2); }
   50% { transform: rotateZ(180deg); -webkit-animation-timing-function: cubic-bezier(.2, .8, 1, 1); }
  100% { transform: rotateZ(360deg); }
}

// Spinner sizes
.loading-spinner-tiny   { .loading-spinner(16px); &::before, &::after { border-width: 1px; } }
.loading-spinner-small  { .loading-spinner(32px); }
.loading-spinner-medium { .loading-spinner(48px); }
.loading-spinner-large  { .loading-spinner(64px); }




// Progress Bar ----------------------

@progress-height: 8px;
@progress-buffer-color: fade(@progress-background-color, 20%);

progress {
  -webkit-appearance: none;
  height: @progress-height;
  border-radius: @component-border-radius;
  background-color: @input-background-color;
  box-shadow: inset 0 0 0 1px @input-border-color;

  &::-webkit-progress-bar {
    background-color: transparent;
  }

  &::-webkit-progress-value {
    border-radius: @component-border-radius;
    background-color: @progress-background-color;
  }

  // Is buffering (when no value is set)
  &:indeterminate {
    background-image:
       linear-gradient(-45deg, transparent 33%, @progress-buffer-color 33%,
                               @progress-buffer-color 66%, transparent 66%);
    background-size: 25px @progress-height, 100% 100%, 100% 100%;

    // Plays animation for 1min (12runs) at normal speed,
    // then slows down frame-rate for 9mins (108runs) to limit CPU usage
    -webkit-animation: progress-buffering 5s linear 12,
                       progress-buffering 5s 60s steps(10) 108;
  }
}

@-webkit-keyframes progress-buffering {
   100% { background-position: -100px 0px; }
}
